/*解题思路：
dp{i,j}:i个人组成j个圈，初始状态dp{3,1}=2
dp{x+1,y}:对于第x+1个人来说，有x个空可以选择，dp{x+1,y}=x*dp{x,y};即dp{i,j}=(i-1)*dp{i-1,j}
对于dp{6，1}，dp{6,2}，至少3个人组成一个圈，在第i个人加入时候，要在前i-1个人中抽两个人才能组成一个新圈
dp{i-1,j}变成dp{i-3,j}(注意从i-1个人中选2个人),且已知三个人能组成2种方案
2×C i−1 ^2=(i−1)!/(i−3)!=(i−1)∗(i−2)
所以dp{i,j+1}=dp{i-3,j}*(i-1)(i-2)
状态方程：
  1.dp{i,j}=(i-1)*dp{i-1,j}  2.dp{i,j}=dp{i-3,j-1}*(i-1)(i-2)
同时还要考虑建不建立新圈都是dp{i,j}的情况，所以
  2.dp{i,j}=dp{i-3,j-1}*(i-1)(i-2)+dp{i,j};

*/
#include<bits/stdc++.h>
using namespace std;
int n,k;
long long dp[1000][1000],p;

int main()
{
  cin>>n>>k>>p;
  dp[3][1]=2;
  for(int i=4;i<=n;i++)
  {
    for(int j=1;3*j<=i&&j<=k;j++)
    {
      dp[i][j]=(i-1)*dp[i-1][j]%p;
      dp[i][j]=(dp[i-3][j-1]*(i-1)*(i-2)+dp[i][j])%p;
    } 
  }
  cout<<dp[n][k]<<endl;
  return 0;
}